package com.dmz.etc.server.netty.server;

import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToMessageDecoder;

import java.util.List;

/**
 * @author lee
 */
public class DmzDecoder extends MessageToMessageDecoder<ByteBuf> {
    @Override
    protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
        // 检查是否有足够的字节来读取长度字段（假设长度字段是4个字节）
        if (in.readableBytes() < 4) {
            return; // 等待更多数据到达
        }

        // 标记当前读取位置，以便在数据不足时可以重置
        // 读取长度字段
        in.markReaderIndex();
        // 读取4个字节的整数作为长度
        int length = in.readInt();

        // 检查是否有足够的字节来读取完整的报文
        if (in.readableBytes() < length) {
            // 数据不足，重置读取位置以便下次读取
            in.resetReaderIndex();
            // 等待更多数据到达
            return;
        }

        // 读取完整的报文数据
        byte[] data = new byte[length];
        in.readBytes(data);

        // 将解码后的数据添加到输出列表中
        out.add(data);
    }
}